package cn.fj.xiaowei.main.common.redis.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;

import java.util.concurrent.TimeUnit;

/**
 * 和 Redis 中值为对象类型的键值对操作相关的工具类
 */
public class ObjValRedisUtil {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 从 Redis 缓存中获取指定的 Key 对应的对象
     *
     * @param key Redis Key
     * @return Redis 缓存中指定的 Key 对应的对象
     * @param <T> 获取的对象的类型
     */
    public <T> T get(String key) {
        return (T) redisTemplate.opsForValue().get(key);
    }

    /**
     * 将对象类型的数据存储到 Redis 缓存中
     *
     * @param key Redis Key
     * @param objVal 要存储的对象
     * @return true - 成功；false - 失败
     * @param <T> 要存储的对象的类型
     */
    public <T> boolean set(String key, T objVal) {
        try {
            redisTemplate.opsForValue().set(key, objVal);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 将对象类型的数据存储到 Redis 缓存中
     *
     * @param key Redis Key
     * @param objVal 要存储的对象
     * @param timeout 过期时间
     * @param unit 过期时间单位
     * @return true - 成功；false - 失败
     * @param <T> 要存储的对象的类型
     */
    public <T> boolean set(String key, T objVal, long timeout, TimeUnit unit) {
        try {
            redisTemplate.opsForValue().set(key, objVal, timeout, unit);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

}
